package com.aiti.lulian.mapper.newCard;

import com.aiti.lulian.dto.CardBaseInfoRankDto;
import com.aiti.lulian.dto.newCard.CardBaseInfoDto;
import com.aiti.lulian.dto.newCard.EnterpriseUserCardUseInfoDto;
import com.aiti.lulian.entity.newCard.CardBaseInfo;
import com.aiti.lulian.vo.CardBaseInfoListVo;
import com.aiti.lulian.vo.CardBaseInfoRankListVo;
import com.aiti.lulian.vo.CardEnterpriseTemplateVo;
import com.aiti.lulian.vo.newCard.*;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * description:
 * auth fcb
 * date 2025-08-11 16:40
 **/
public interface CardPersonalBaseInfoMapper extends BaseMapper<CardBaseInfo> {

    void updateCardInfo(@Param("dto") CardBaseInfo dto);

    void removeCardInfo(@Param("baseInfoId") String baseInfoId);

    List<CardBaseInfoListVo> userCardList(@Param("userId") String userId);

    List<CardBaseInfoRankListVo> userCardRankList(Page page, @Param("dto") CardBaseInfoRankDto dto);

    List<CardBaseInfoRankListVo> getUserCardRankByCondition(@Param("dto") CardBaseInfoRankDto dto);

    void clearScore();

    Integer queryCardUseResourceType(@Param("cardId") String cardId);

    Integer queryCurrentUseCardCount(@Param("userId") String userId);

    Integer queryCountByUserIdAndEnterpriseName(@Param("userId") String userId, @Param("enterpriseName") String enterpriseName);

    List<CardBaseInfo> queryEnterpriseCardList(@Param("userId") String userId);

    Integer queryExchangeCard(@Param("fromUserId") String fromUserId, @Param("toCardId")String toCardId);

    CooperationEnterpriseVo queryCooperationEnterprise(@Param("cardId") String cardId);

    List<UserCardRoleVo> queryUserCardRoleListByCardId(@Param("cardId") String cardId);

    UserCurrentUseCardInfoVo queryUserCurrentUseCardInfo(@Param("userId") String userId);

    List<CardBaseInfo> queryUserEnterpriseCardList(@Param("userId") String userId, @Param("enterpriseId")String enterpriseId);

    void setCardBaseInfoTemplateId(@Param("cardId") String cardId, @Param("templateId") String templateId);

    List<String> queryBaseIdListByTemplateId(@Param("templateId") String templateId);

    Integer queryMyCardCount(@Param("userId") String userId, @Param("cardId") String cardId);

    List<String> selectUserIdListByRoleId(@Param("roleId") String roleId);

    Map<String, String> selectEnterpriseUsingData(@Param("enterpriseId") String enterpriseId);

    Map<String, String> selectEnterpriseCardUsingData(@Param("enterpriseId") String enterpriseId, @Param("templateId") String templateId);

    Map<String, String> selectPersonalUsingData(@Param("userId") String userId);

//    Map<String, String> selectPersonalCardUsingData(@Param("templateId") String templateId, @Param("userId") String userId);

    Map<String, String> selectPersonalCardUsingData(@Param("cardId") String cardId);

    CardBaseInfoVo selectPersonalCardDetail(@Param("cardId") String cardId, @Param("userId") String userId);

    List<CardMemberDataVo> selectMemberDataByTemplate(@Param("dto") CardBaseInfoDto dto, Page<CardMemberDataVo> page);

    List<CardEnterpriseTemplateVo> selectTemplateUsingData(@Param("dto") CardBaseInfoDto dto, Page<CardEnterpriseTemplateVo> page);

    Map<String, String> selectAdminInfoByEnterpriseId(@Param("enterpriseId") String enterpriseId);
    String queryEnterpriseCardId(@Param("enterpriseId")String enterpriseId, @Param("templateId")String templateId, @Param("userId")String userId);

    void deleteCardBaseInfoBatch(@Param("baseIdList") List<String> baseIdList, @Param("userId") String userId);

    void updateCardTemplateId(@Param("cardId")String cardId, @Param("templateId")String templateId, @Param("userId")String userId);

    Integer queryEnterpriseCardShareCount(@Param("enterpriseId")String enterpriseId);

    Integer queryEnterpriseCardViewCount(@Param("enterpriseId")String enterpriseId);

    List<EnterpriseUserCardUseInfoVo> queryEnterpriseUserCardUseInfo(@Param("page")IPage<EnterpriseUserCardUseInfoVo> page, @Param("dto") EnterpriseUserCardUseInfoDto dto);

    CardBaseInfo queryCardInfoWithExpireTime(@Param("cardId") String cardId);

    String selectUsernameByUserId(@Param("userId") String userId);
}
